package cn.csc.module.product.service.seachcontext;

import cn.csc.framework.common.pojo.PageResult;
import cn.csc.module.product.controller.admin.seachcontext.vo.SpuSeachContextCreateReqVO;
import cn.csc.module.product.controller.admin.seachcontext.vo.SpuSeachContextExportReqVO;
import cn.csc.module.product.controller.admin.seachcontext.vo.SpuSeachContextPageReqVO;
import cn.csc.module.product.controller.admin.seachcontext.vo.SpuSeachContextUpdateReqVO;
import cn.csc.module.product.dal.dataobject.seachcontext.SpuSeachContextDO;

import javax.validation.Valid;
import java.math.BigInteger;
import java.util.Collection;
import java.util.List;

/**
 * 商品搜索内容 Service 接口
 *
 * @author 华南城
 */
public interface SpuSeachContextService {

    /**
     * 创建商品搜索内容
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    BigInteger createSpuSeachContext(@Valid SpuSeachContextCreateReqVO createReqVO);

    /**
     * 更新商品搜索内容
     *
     * @param updateReqVO 更新信息
     */
    void updateSpuSeachContext(@Valid SpuSeachContextUpdateReqVO updateReqVO);

    /**
     * 删除商品搜索内容
     *
     * @param id 编号
     */
    void deleteSpuSeachContext(BigInteger id);

    /**
     * 删除商品内容
     */
    int deleteSpuSeachByUserId(BigInteger userId);

    /**
     * 获得商品搜索内容
     *
     * @param id 编号
     * @return 商品搜索内容
     */
    SpuSeachContextDO getSpuSeachContext(BigInteger id);

    /**
     * 获得商品搜索内容列表
     *
     * @param ids 编号
     * @return 商品搜索内容列表
     */
    List<SpuSeachContextDO> getSpuSeachContextList(Collection<BigInteger> ids);

    /**
     * 获得商品搜索内容分页
     *
     * @param pageReqVO 分页查询
     * @return 商品搜索内容分页
     */
    PageResult<SpuSeachContextDO> getSpuSeachContextPage(SpuSeachContextPageReqVO pageReqVO);

    /**
     * 获得商品搜索内容列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 商品搜索内容列表
     */
    List<SpuSeachContextDO> getSpuSeachContextList(SpuSeachContextExportReqVO exportReqVO);

    /**
     *  根据搜索商品文字新增或者修改搜索记录
     * @param reqVO
     */
    void searchContext(SpuSeachContextCreateReqVO reqVO);

    /**
     * 查询
     * @param reqVO
     * @return
     */
    List<SpuSeachContextDO> selectContextList(SpuSeachContextCreateReqVO reqVO);

}
